package com.lumis.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.lumis.dto.Municipio;
import com.lumis.dto.Provincia;

@Repository
@Transactional
public class LocalidadesDAO {

	@Autowired
	private SessionFactory sessionFactory;

	@SuppressWarnings("unchecked")
	public List<Provincia> getAllProvincias() {
		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Provincia.class);
		criteria.addOrder(Order.asc("nombre"));
		sessionFactory.close();
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	public List<Municipio> getAllMunicipios() {
		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Municipio.class);
		criteria.addOrder(Order.asc("nombre"));
		sessionFactory.close();
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	public List<Municipio> getMunicipiosDeProvincia(String codProvincia) {
		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Municipio.class);
		criteria.add(Restrictions.like("codProvincia", codProvincia));
		criteria.addOrder(Order.asc("nombre"));
		sessionFactory.close();
		return criteria.list();
	}

	@SuppressWarnings("unchecked")
	public List<Municipio> obtenerMunicipiosDelaMismaProvinciaQueUnMunicipio(
			String codMunicipio) {
		Municipio municipio = (Municipio) sessionFactory.getCurrentSession().get(Municipio.class, codMunicipio);
		Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Municipio.class);
		criteria.add(Restrictions.like("codProvincia", municipio.getCodProvincia()));
		return criteria.list();
	}

	public String obtenerProvinciadeMunicipio(String codMunicipio) {
		Municipio municipio = (Municipio) sessionFactory.getCurrentSession().get(Municipio.class, codMunicipio);
		return municipio.getCodProvincia();
	}

	public List<Object> ObtenerTodoMunicipio(String codMunicipio) {
		
		String codProvincia = obtenerProvinciadeMunicipio(codMunicipio);
		List<Municipio> municipios = getMunicipiosDeProvincia(codProvincia);
		
		List<Object> lista = new ArrayList();
		lista.add(codProvincia);
		lista.add(municipios);
		
		return lista;
	}

	public String getNombreProvincia(String codProvincia){
		Provincia provincia = (Provincia) sessionFactory.getCurrentSession().get(Provincia.class, Integer.parseInt(codProvincia));
		return provincia.getNombre();
	}

	public String getNombreMunicipio(String codMunicipio) {
		Municipio municipio = (Municipio) sessionFactory.getCurrentSession().get(Municipio.class, codMunicipio);
		return municipio.getNombre();
	}

}
